package com.company.hrmadmin.modules.service;

import com.company.hrmadmin.modules.domain.Department;
import com.baomidou.mybatisplus.extension.service.IService;
import com.company.hrmadmin.modules.entity.dto.employee.DepNameDTO;
import com.company.hrmadmin.modules.entity.dto.employee.EmpTypeDTO;

import java.util.List;

/**
 * @author Xmirror
 * @description 针对表【bs_department(部门)】的数据库操作Service
 * @createDate 2022-03-18 15:38:50
 */
public interface DepartmentService extends IService<Department> {

    /**
     * 根据部门ID获取上级部门，直系上级部门
     *
     * @param depId 部门ID
     * @return Department 部门实体
     */
    Department getParentDep(Integer depId);

    /**
     * 获取子部门
     *
     * @param depId 部门ID
     * @return List集合
     */
    List<Department> getChildrenDepList(Integer depId);

    /**
     * 从顶级部门开始查询，一直查到最底层部门
     *
     * @param depId 部门ID
     * @return List 集合
     */
    List<Department> getDepRecListById(Integer depId);

    /**
     * 查询出所有顶级部门
     *
     * @return List
     */
    List<Department> getTopDepList();

    /**
     * 获取树形列表，即所有的部门信息全部获取
     *
     * @return List 集合
     */
    List<Department> getDepTreeList();

    /**
     * 根据公司ID查询所有的部门
     *
     * @param companyId 公司ID
     * @return 部门List
     */
    List<Department> getDepListByCompanyId(Integer companyId);

    /**
     * 查询该用户对应的公司的所有部门名称
     *
     * @param userId 用户ID
     * @return 名称List
     */
    List<DepNameDTO> getDepNameList(Integer userId);

    /**
     * 获取聘用形式 DTO 列表
     *
     * @return List
     */
    List<EmpTypeDTO> getEmpTypeList();

}
